home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / util / rexx / ParseRX.lha / ParseRX next >
Text File  |  2001-06-06  |  7KB  |  298 lines

  1. /* ParseRX by Brucey (one stupidly simple ARexx Utility:) */
  2.  
  3.  
  4. /* this whole program is based around this loop...
  5.  
  6. DO FOREVER
  7.  CALL WRITECH(STDOUT, '1B'X || '[33m'RC'' || '1B'X || '[31m:' || '1B'X || '[32m'address()'' || '1B'X || '[31m: ')
  8.  PRX_LN=READLN(STDIN)
  9.  INTERPRET PRX_LN
  10. END
  11.  
  12. you would type the command "exit" to leave it
  13.  
  14. all the rest of this script is fancy functions
  15. to aid in making/debugging arexx functions
  16. */
  17.  
  18.  
  19. /*
  20. commands so far are ...
  21.  
  22.      Q,EXIT or <return>(twice) will Quit ParseRX
  23.      SHP = same as typing  "say show('p')"
  24.      ADC = ADDRESS COMMAND
  25.      ADR portname = address portname (ADRQ for Requester)
  26.      ADV portname = address value portname (ADVQ for Requester)
  27.      ALIB / RLIB to Add Revove ARexx libraries
  28. */
  29.  
  30.  
  31.  
  32.  
  33. OPTIONS RESULTS
  34.  
  35. PRX_LibPat = 'libs:#?rex#?'
  36.  
  37. /* intro message */
  38.  
  39. CALL WRITECH(STDOUT, '1B'X || '[32mParseRX... Type Q or exit to Quit, HELP for info' || '0A'X || '')
  40.  
  41. /* get an srgument for a port to open on , or it uses the port "COMMAND" */
  42.  
  43. INTERPRET 'ADDRESS' ARG(1)
  44.  
  45.  
  46. /* this stuff handles errors that would normally exit an arexx script */
  47.  
  48. OPTIONS FAILAT 100
  49.   ERROR: IF (RC>0)&(RC~='RC') THEN DO; SAY 'ERROR 'RC':' ErrorText(RC) 'line: 'SIGL; RC= ; END
  50.  SYNTAX: IF (RC>0)&(RC~='RC') THEN DO; SAY SYNTAX RC':' ErrorText(RC) 'line: 'SIGL; ; END
  51.    HALT: IF (RC>0)&(RC~='RC') THEN DO; SAY 'HALT : Interrupt call! line: 'SIGL; END
  52. FAILURE: IF (RC>0)&(RC~='RC') THEN DO; SAY 'FAILURE :' ErrorText(RC) 'line: 'SIGL; END
  53.  
  54. SIGNAL ON ERROR
  55. SIGNAL ON HALT
  56. SIGNAL ON FAILURE
  57. SIGNAL ON SYNTAX
  58.  
  59. /* after typing some input the RETURN and RC vars are copied to
  60.    PRX_RESULT and PRX_RC and displayed at the console prompt,
  61.    so 1st we set them to display '-'   */
  62.  
  63. PRX_RC='-'
  64. PRX_RESULT='-'
  65.  
  66. /* Get a list of arexx libraries acc to PRX_LibPat (at top of file) */
  67.  
  68.  ADDRESS COMMAND 'list 'PRX_LibPat' lformat "%n" to pipe:temp'
  69.  PRX_Libs=''
  70.  CALL OPEN('h','pipe:temp')
  71.    DO WHILE ~EOF('h')
  72.    PRX_String = READLN('h')
  73.     IF PRX_String~="" then PRX_Libs = PRX_Libs''prx_String' '
  74.    END
  75.  CALL CLOSE('h')
  76.  
  77. PRX_Libs=Strip(PRX_Libs)
  78.  
  79. call open('h','ENV:ClassAct/ClassAct')
  80. PRX_ln=readln('h')
  81.  
  82. call close('h')
  83. parse var prx_ln 'FALLBACKFONT "' PRX_fname'/'PRX_fsize '"' .
  84.  
  85. if PRX_fname=='' | PRX_fsize=='' then do
  86. PRX_fname='Topaz.font'
  87. PRX_fsize=8
  88.  
  89. end
  90.  
  91. /* THE MAIN LOOP */
  92.  
  93.  DO FOREVER
  94.  
  95.  /* write the prompt as RC|RESULT|ADDRESS: (plus some colour) */
  96.  
  97.  CALL WRITECH(STDOUT, '1B'X || '[33m'PRX_RC'' || '1B'X || '[31m:' || '1B'X || '[32m'address()'' || '1B'X || '[31m: ')
  98.  
  99.  
  100.  /* Wait for user input from STDIN console */
  101.  
  102.  PRX_LN=READLN(STDIN)
  103.  
  104.    SELECT
  105.  
  106.      /* if you only press return you are asked if you want to quit */
  107.      WHEN PRX_LN=="" THEN DO
  108.      CALL WRITECH(STDOUT,'I Am Going to Quit ? (<return> for OK):');
  109.      IF READLN(STDIN)=='' THEN CALL QIT()
  110.      END
  111.    WHEN UPPER(PRX_LN)=='Q' | UPPER(PRX_LN)=='QUIT' THEN CALL QIT()
  112.  
  113.      /* print help */
  114.      WHEN UPPER(PRX_LN)=='HELP' THEN DO
  115.      SAY ''
  116.      SAY 'ParseRX Written by bsteers@ukonline.co.uk' || '0A'X || 'HELP for Commands.....'
  117.      SAY 'Q,EXIT or <return>(twice) will Quit ParseRX'
  118.      SAY 'SHP = say show(''p'')'
  119.      SAY 'ADC = ADDRESS COMMAND'
  120.      SAY 'ADR portname = address portname, ADRQ for Req'
  121.      SAY 'ADV portname = address value portname, ADVQ for Req'
  122.      SAY 'ALIB / RLIB to Add Revove ARexx libraries'
  123.      END
  124.  
  125.    /* other functions */
  126.  
  127.    WHEN UPPER(PRX_LN)=='ADC' THEN ADDRESS COMMAND
  128.  
  129.    WHEN WORD(UPPER(PRX_LN),1)=='ADR' THEN ADDRESS(WORD(PRX_LN,2))
  130.    WHEN WORD(UPPER(PRX_LN),1)=='ADV' THEN ADDRESS VALUE WORD(PRX_LN,2)
  131.  
  132.    WHEN UPPER(PRX_LN)=='ADRQ' THEN ADDRESS(ADRES('*'))
  133.    WHEN UPPER(PRX_LN)=='ADVQ' THEN ADDRESS VALUE ADRES('*')
  134.  
  135.    WHEN UPPER(PRX_LN)=='ALIB' THEN CALL ARLIB('Adding')
  136.    WHEN UPPER(PRX_LN)=='RLIB' THEN CALL ARLIB('Removing')
  137.  
  138.    WHEN UPPER(PRX_LN)=='SHP' THEN SAY SHOW('P')
  139.  
  140.      OTHERWISE DO
  141.  
  142.      /* if no commands are given just interpret the line */
  143.  
  144.      INTERPRET PRX_LN
  145.  
  146.      /* set RC/RESULT vars back to '-' if they are not any value  */
  147.  
  148.      IF RESULT=='RESULT' THEN PRX_RESULT='-'; ELSE; PRX_RESULT=RESULT
  149.      IF RC=='RC' THEN PRX_RC='-'; ELSE;PRX_RC=RC
  150.      END
  151.    END
  152.  
  153.  END /*  END of the MAIN LOOP */
  154.  
  155.  
  156. QIT:
  157. SAY 'GoodBye :)'
  158. EXIT
  159.  
  160.  
  161.  
  162. /*  add/remove arexx libraries */
  163. ARLIB:
  164. PRX_Mode = Arg(1)
  165. PRX_Count = 1
  166. PRX_Mark = 1
  167. drop PRX_ALib.
  168. PRX_ALibs = show('L')
  169.  
  170. drop PRX_List.
  171.  
  172.   IF PRX_Mode == 'Adding' THEN DO
  173.     DO PRX_Count=1 to words(PRX_Libs)
  174.       if index( upper(PRX_ALibs) , upper( word(PRX_Libs,PRX_Count)) )==0 then do
  175.       PRX_List.PRX_Mark = word(PRX_Libs,PRX_Count)
  176.       PRX_List.0 = PRX_Mark
  177.       PRX_Mark = PRX_Mark + 1
  178.       end
  179.     end
  180.   END
  181.  
  182.   ELSE DO  /*    So Removing  */
  183.   PRX_List.0 = words(PRX_ALibs)
  184.   IF PRX_List.0 ==0 then do
  185.     say 'no libraried added'
  186.     return
  187.     end
  188.  
  189.     DO PRX_Count = 1 TO words( PRX_ALibs )
  190.     PRX_List.PRX_Count = word( PRX_Alibs, PRX_Count )
  191.     END
  192.   END
  193.  
  194. LIB_LIST = list('L','Libs for 'PRX_Mode)
  195.  IF LIB_LIST=='' | LIB_LIST=='LIB_LIST' then return
  196.  
  197.   SAY PRX_Mode' libraries 'LIB_LIST
  198.  
  199.    DO PRX_COUNT=1 TO WORDS(LIB_LIST)
  200.     IF PRX_Mode == 'Adding' THEN
  201.     CALL ADDLIB(WORD(LIB_LIST,PRX_COUNT),0,-30,0)
  202.     ELSE
  203.     CALL REMLIB(WORD(LIB_LIST,PRX_COUNT))
  204.    END
  205.  
  206. RETURN
  207.  
  208. ADRES:
  209.   IF ARG(1)=='*' THEN DO
  210.   drop PRX_List.
  211.   PRX_Count = 1
  212.   PRX_string = show('p',,'¿')
  213.     do while PRX_Count > 0
  214.     PRX_Mark = index(PRX_string,'¿')
  215.     if PRX_Mark == 0 then PRX_Count = -2
  216.       else do
  217.       PRX_List.PRX_Count = substr(PRX_String,1, PRX_Mark - 1)
  218.       PRX_String = substr(PRX_String, PRX_Mark + 1)
  219.       PRX_List.0 = PRX_Count
  220.       PRX_Count = PRX_Count + 1
  221.       end
  222.     end
  223.   NEW_PORT = list('P','Select a Port')
  224.   END
  225.  
  226.  ELSE; NEW_PORT=ARG(1)
  227. RETURN NEW_PORT
  228.  
  229.  
  230. list:
  231. call close(pipe)
  232.  
  233. if ~open(pipe,'awnpipe:new/xc') then exit(205)
  234. call topipe('"'Arg(2)'" defg v a m')
  235.  
  236. if arg(1)=='P' THEN; PRX_LB = topipe('listbrowser lbl ""')
  237.                ELSE; PRX_LB = topipe('listbrowser m lbl ""')
  238. PRX_MaxStr=0
  239. PRX_Seld=''
  240. do PRX_count=1 TO PRX_List.0
  241. PRX_MaxStr = max(PRX_MaxStr,Length(PRX_List.PRX_Count))
  242. call topipe('browsernode gt "'PRX_List.PRX_Count'"')
  243. END
  244.  
  245. call topipe('layout b 0 si so weih 0')
  246. PRX_OK = topipe('button gt "_OK" c')
  247. PRX_Can = topipe('button gt "_Cancel" c')
  248. call topipe('le')
  249.  
  250. prx_w = (PRX_MaxStr*PRX_fsize)+30
  251. prx_h = ( PRX_List.0 * PRX_fsize)+30
  252.  
  253. call topipe('open')
  254.  
  255. call topipe('id 'PRX_LB' SORT=0')
  256.  
  257. call topipe('id 0 wide 'PRX_W' high 'PRX_H)
  258.  
  259.  do while ~eof(pipe)
  260.  call topipe('con')
  261.  in=readln(pipe)
  262.  parse var in in1 in2 in3 in4 in5
  263.   if in1=='gadget' | in1=='close' then do
  264.     select
  265.     when in2==PRX_LB then PRX_Seld=strip(in5)
  266.       when in2==PRX_OK then do
  267.         if prx_seld=='' then do
  268.         say 'Nothing Selected'
  269.         call close(pipe)
  270.         if arg(1)=='P' then return address();else; return ''
  271.         end
  272.       end
  273.       otherwise do
  274.       call close(pipe)
  275.       say 'Aborted'
  276.       if arg(1)=='P' then return address();else; return ''
  277.       end
  278.     end
  279.   end
  280.  end
  281. call close(pipe)
  282. PRX_R=''
  283.  
  284. do PRX_Count=1 TO words(PRX_Seld)
  285. PRX_Val = word(PRX_Seld,PRX_Count)-1
  286. PRX_R=PRX_R''PRX_List.PRX_Val' '
  287. END
  288.  
  289. PRX_R = strip(PRX_R)
  290. return PRX_R
  291.  
  292. topipe:
  293. parse arg out
  294. call writeln(pipe,out); res=readln(pipe)
  295. parse var res res1 res2 .
  296. if res1='ok' then return(res2)
  297. say 'error from: 'out; say '  responce: ' res; exit
  298.